カクヨムに書いた小説を KDP で出版する
sta.iconダメです
運営から連絡来た
iOSリーダーアプリ(の運用元のAppleと)の規約違反になる
アプリからAmazonなどショッピングサイトに誘導しちゃいけない ← これがある
破っちゃうとカクヨムがリーダーアプリ使えなくなっちゃう
実質以下が言える
[** カクヨムからAmazonへのリンク張るのはダメいや違うぞ
x Amazonにリンクする
o KDPから許可もらうために問い合わせIDを記載する
sta.icon無断転載禁止なので連絡全文やキャプチャは載せられぬ
感想
縦書きでも読めます
誤字脱字や設定の矛盾が見つかると超恥ずかしい
日向で言えば琢磨のキャラ違ってるし、全校集会で地べた座ってるはずなのに最後背もたれもたれてるしw
商業と比べると全体的に稚拙だなぁと感じる
やっぱラノベ作家さんたちすげえよ
中高生でも平易に読めるから「俺でも書ける」思いがちだけど、違うのよね
あなたの小説、電子書籍にできます的な
背景
kindle で自分が書いた小説読みたい
パーソナルドキュメント使えば個人用はできるが、mobi だと綺麗な本がつくれん
きれいな本は markdown to epub3 したのを KDP で出版したもの
だったら、自分用に適当な表紙と値段で出版してしまえばいいのではと
ド素人の題材エグい作品なので恥ずかしいが
いいよ。クリエイターなんだから羞恥心なんてすててしまえ
https://gyazo.com/db7f9e1d2844d2e140cbf94eb766596f
桁が違いすぎて笑うw
66万文字を一つに詰め込んだので
やったこと
最初は縦書きにしようとしたが諦めた
Pandoc だけでは無理ゲー(TexLive とか必要っぽい)
縦書きは何かとしんどい
別に縦書きじゃなくても読める
慣れてると縦書きが楽だが、所詮は慣れ
科学的に縦書きが良い理由があるわけじゃない(と思う)
カクヨムに投稿した Markdown 原稿を、epub3 に変換する用の Markdown に変換する
すでに統一的なフォーマットで貯めていたことが功を奏した
変換アルゴリズムはちゃんと整理した
https://gyazo.com/ab1e26db217487d778d859ba9925d80d 整理時のメモ
KDP 出版申請
NG食らった
KDP「これ盗作じゃね?許可取ったん?パブドメしか出版できひんよ」
当然違う
作者本人です
カクヨムは投稿者本人に著作権です
というわけでKDPに違うよアピール
一応カクヨム側の紹介文に問い合わせID表記した
KDP「オッケーです」
今日昼出したのに、20:00 にはもう出版できてるの早すぎない?
優秀やでぇ……
スクリ
code:python
# -*- coding: utf-8 -*-
import os
import re
import sys
def abort(msg):
print('Error!: {0}'.format(msg))
exit(1)
def get_filename(path):
return os.path.basename(path)
def get_basename(path):
return os.path.splitext(get_filename(path))0 def get_extension(path):
return os.path.splitext(get_filename(path))1 def file2list(filepath):
ret = []
with open(filepath, encoding='utf8', mode='r') as f:
return ret
def list2file(filepath, ls):
with open(filepath, encoding='utf8', mode='w') as f:
def parse_arguments():
import argparse
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
)
parser.add_argument('-i', '--input', default=None,
help='An input filename.')
parser.add_argument('-o', '--output', default=None,
help='An output filename.')
args = parser.parse_args()
return args
def get_converted_lines(lines):
new_lines = []
count_blankline_continuous = 0
is_prev_line_section = False
for i,line in enumerate(lines):
is_sentence_line = False
is_section_line = False
is_blank_line = False
is_eol = False
if i == len(lines)-1:
is_eol = True
if len(line.strip())==0:
is_blank_line = True
is_section_line = True
else:
is_sentence_line = True
if is_sentence_line and count_blankline_continuous==0:
if not(is_prev_line_section):
new_lines.append('')
new_lines.append(line)
# update state
# -> nothing
continue
if is_sentence_line and count_blankline_continuous!=0:
new_lines.append('')
new_lines.append('<br>'*count_blankline_continuous)
new_lines.append('')
new_lines.append(line)
# update state
count_blankline_continuous = 0
is_prev_line_section = False
continue
if is_blank_line:
# update state
count_blankline_continuous += 1
is_prev_line_section = False
continue
if is_section_line:
new_lines.append('')
new_lines.append('<div style="page-break-before:always"></div>')
new_lines.append('')
new_lines.append(line)
# update state
count_blankline_continuous = 0
is_prev_line_section = True
continue
raise RuntimeError('ここには来ないはずだが')
return new_lines
def get_subsectionized_lines(lines):
new_lines = []
for i,line in enumerate(lines):
if len(line.strip())==0 or line0 != '#': new_lines.append(line)
continue
if line == '# プロローグ':
new_lines.append(line)
continue
# '# 第'
# '# ='
# '# 5'
if s=='第':
# 部, 大見出しにする
new_lines.append(line)
continue
if s=='=':
# 章, 中見出しにする
# ただし邪魔な記号は取り除く
newline = line.replace('= ', '').replace(' =', '').replace('=', '')
new_lines.append('#{}'.format(newline))
continue
if s!='1':
# 節, 小見出しにする
# - ……と思ったが、あまり見出しが多すぎてもうっとうしいので
# 空行で自然な区切りにしてみる.
# - ただし '# 1' の前には入れない
#
new_lines.append('<br><br>')
new_lines.append(' ◆ ◆ ◆')
new_lines.append('<br><br><br>')
return new_lines
def ____main____():
pass
if __name__ == "__main__":
args = parse_arguments()
MYDIR = os.path.abspath(os.path.dirname(__file__))
infilepath = args.input
outfilepath = args.output
if infilepath == None:
abort('An input filepath required!')
if outfilepath == None:
abort('An output filepath required!')
if not(os.path.exists(infilepath)):
abort('The input file "{0}" does not exists.'.format(infilepath))
lines = file2list(infilepath)
new_lines = get_subsectionized_lines(lines)
lines = new_lines
new_lines = get_converted_lines(lines)
list2file(outfilepath, new_lines)